package top.lixunda.ecommerce.server.user.api.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.ecommerce.server.user.api.entity.db.*;
import top.lixunda.ecommerce.server.user.api.entity.dto.UserAddressChgDTO;
import top.lixunda.ecommerce.server.user.api.entity.dto.UserAddressInsertDTO;
import top.lixunda.common.validate.XumValid;

import java.util.List;

/**
 * @author Xumda
 * @version time:2019/12/14 17:03
 * <p>
 * 用户地址管理
 */
@Api("用户相关接口")
@RequestMapping("/userAddress")
public interface IUserAddressController {

    /**
     * 获取省份信息
     *
     * @return 省份信息列表
     */
    @ApiOperation("查询所有省份信息列表")
    @GetMapping("queryProvinces")
    MessageObject<List<PositionProvinceDO>> queryProvinces();

    /**
     * 根据provinceId查询city
     *
     * @param id province id
     * @return city列表
     */
    @ApiOperation("根据省份id获取city列表")
    @GetMapping("queryCitiesByProvince")
    MessageObject<List<PositionCityDO>> queryCitiesByProvince(@RequestParam("id") Long id);

    /**
     * 根据CityId 获取county列表
     *
     * @param id cityId
     * @return county列表
     */
    @GetMapping("queryCountiesByCity")
    MessageObject<List<PositionCountyDO>> queryCountiesByCity(@RequestParam("id") Long id);

    /**
     * 根据countyId获取town列表
     *
     * @param id countyId
     * @return town列表
     */
    @GetMapping("queryTownsByCounty")
    MessageObject<List<PositionTownDO>> queryTownsByCounty(@RequestParam("id") Long id);

    /**
     * 根据townId获取Village列表
     *
     * @param id townId
     * @return village列表
     */
    @GetMapping("queryVillagesByTown")
    MessageObject<List<PositionVillageDO>> queryVillagesByTown(@RequestParam("id") Long id);

    /**
     * 获取用户默认地址，不存在默认地址返回null
     *
     * @return 用户默认地址，不存在默认地址返回null
     */
    @GetMapping("queryDefaultUserAddress")
    MessageObject<UserAddressDO> queryDefaultUserAddress();

    /**
     * 根据id查询地址信息
     * @param id 用户地址id
     * @return 用户地址，不存在返回null
     */
    @GetMapping("queryAddressById")
    MessageObject<UserAddressDO> queryAddressById(@RequestParam("id") Long id);

    /**
     * 获取用户保存的所有地址信息
     *
     * @return 用户的所有地址信息列表
     */
    @GetMapping("queryAllUserAddress")
    MessageObject<List<UserAddressDO>> queryAllUserAddress();

    /**
     * 插入新的用户地址信息
     *
     * @param userAddressInsertDTO 插入用户地址信息DTO
     * @return 返回插入成功的地址信息
     */
    @PostMapping("insertUserAddress")
    MessageObject<UserAddressDO> insertUserAddress(@RequestBody @XumValid UserAddressInsertDTO userAddressInsertDTO);

    /**
     * 更改用户地址信息
     *
     * @param userAddressChgDTO 用户地址信息DTO
     * @return 更新后的用户地址信息
     */
    @PostMapping("updateUserAddressById")
    MessageObject<UserAddressDO> updateUserAddressById(@RequestBody @XumValid UserAddressChgDTO userAddressChgDTO);

    /**
     * 根据id删除用户地址信息，只能删除当前登陆用户的地址信息
     *
     * @param id 用户地址信息唯一Id
     * @return 删除是否成功，始终为true
     */
    @GetMapping("deleteUserAddressById")
    MessageObject<Boolean> deleteUserAddressById(@RequestParam("id") Long id);

}
